package com.base.themvx.utils.filetask

import java.lang.ref.WeakReference

/**
 ******************(^_^)***********************<br>
 * Author: fee(QQ/WeiXin:1176610771)<br>
 * Date: 2022/8/15<br>
 * Time: 09:46<br>
 * <P>DESC:
 * 下载任务信息
 * </p>
 * ******************(^_^)***********************
 */
class DownloadTaskInfo {

    /**
     * 要下载的资源 URL地址
     */
    internal var mResourceUrl = ""


    /**
     * 当前下载到的目标文件夹
     */
    internal var mTargetFileDir: String = ""

    /**
     * 下载完成时最终的文件名称
     * eg.: "xx.apk"
     */
    internal var mFinalFileName = ""

    /**
     * 下载过程中临时的文件名称
     * eg.:"xx.temp"
     */
    internal var mDownloadTempFileName = ""

    /**
     * 任务的进度监听者,使用弱引用
     */
    private var mWeakRefListener: WeakReference<TaskProgressListener?>? = null

    /**
     * 要下载的资源 Url
     */
    fun withDownloadUrl(resourceUrl: String?): DownloadTaskInfo {
        this.mResourceUrl = resourceUrl ?: ""
        return this
    }

    /**
     * 要下载到的本地文件目录
     */
    fun withDownloadDir(targetFileDir: String): DownloadTaskInfo {
        this.mTargetFileDir = targetFileDir
        return this
    }

    /**
     * 下载完成后最终的文件名称
     * @param targetFinalFileName eg.:"xx.apk"
     */
    fun withDownloadFinalFileName(targetFinalFileName: String): DownloadTaskInfo {
        this.mFinalFileName = targetFinalFileName
        return this
    }

    /**
     * 下载过程中存储的临时文件名称
     * @param targetTempFileName eg.:"xx.temp"
     */
    fun withDownloadTempFileName(targetTempFileName: String): DownloadTaskInfo {
        this.mDownloadTempFileName = targetTempFileName
        return this
    }

    /**
     * 下载过程的进度监听者
     * @param taskProgressListener 注意：如果是局部代码块范围内构建的对象，会不久就被回收了
     */
    fun withTaskListener(taskProgressListener: TaskProgressListener?): DownloadTaskInfo {
        taskProgressListener?.let {
            it.mTaskUrl = mResourceUrl
            mWeakRefListener = WeakReference(it)
        }
        return this
    }

    /**
     * 获取当前下载任务的监听者
     * 注意：如果是局部代码块范围内构建的对象，会不久就被回收了
     * @return TaskProgressListener?
     */
    fun getTaskListener(): TaskProgressListener? {
        return mWeakRefListener?.get()
    }

    /**
     * 开始下载任务
     */
    fun start() {
        CommonDownloader.getDownloader().startDownload(this)
    }

    /**
     * 当前是否为有效的下载任务
     */
    fun isValidTask() = mResourceUrl.isNotBlank()

    override fun toString(): String {
        return "DownloadTaskInfo(mResourceUrl='$mResourceUrl', mTargetFileDir='$mTargetFileDir', mFinalFileName='$mFinalFileName')"
    }
}